package com.kx.my05;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

/**
 * @Aspect：是aspectj框架中的注解。 作用：表示当前类是切面类。
 * 切面类：是用来给业务方法增加功能的类，在这个类中有切面的功能代码
 */
@Aspect
public class MyAspect {
    /**
     * @PointCut：定义和管理切入点，如果你的项目中有多个切入点表达式是重复的，可以使用此注解
     * 属性：value 切入点表达式
     * 特点：当使用@Pointcut定义在一个方法的上面，此时这个方法的名称就是切入点表达式的别名
     *      其它的通知中，value属性就可以调用此方法，代替切入点表达式
     */
    @Pointcut("execution(* *..SomeServiceImpl.doSecond(..))")
    public void myPt() {
        //无需代码
    }

    @Before(value = "myPt()")
    public void myBefore() {
        System.out.println("前置通知，在目标方法之前先执行");
    }

    @After(value = "myPt()")
    public void myAfter() {
        System.out.println("后置通知，总是会被执行的代码");
    }

}
